// 路由鉴权(路由的访问权限)
import router from '@/router';
import setting from './setting';
//进度条组件
import nprogress from 'nprogress';
//引入进度条样式
import 'nprogress/nprogress.css';
nprogress.configure({ showSpinner: false }); //取消进度条转圈圈

//获取用户相关小仓库内部的token数据，判断用户是否登录
import useUserStore from './store/modules/user';
import pinia from './store'; //引入小仓库之前必须有大仓库
let userStore = useUserStore(pinia);

//全局前置守卫
router.beforeEach(async (to: any, _from: any, next: any) => {
  nprogress.start(); //进度条

  //获取token，判断用户登录状态
  let token = userStore.token;
  let username = userStore.username;

  if (token) {
    //登录成功，对于login路径转发到首页
    if (to.path === '/login') {
      next({ path: '/' });
    } else {
      //访问其他路由, 有用户系信息就放行
      if (username) {
        next();
      } else {
        //没有就重新获取
        try {
          await userStore.userInfo();

          //刷新是是异步路由的话，可能获取到用户信息但路由还没加载，导致空白
          //重定向：中断当前导航，执行新的导航
          next({ ...to });
        } catch (error) {
          //token过期，或者修改本地token导致 无法获取信息
          console.log('路由守卫获取用户信息失败', error);

          //token过期，清空用户数据
          await userStore.userLogout();
          next({ path: '/login', requry: { redirect: to.path } });
        }
      }
    }
  } else {
    //未登录，去login
    if (to.path === '/login') {
      next();
    } else {
      next({ path: '/login', requry: { redirect: to.path } });
    }
  }
});

//全局后置守卫
router.afterEach((to: any) => {
  //文档名改一下
  document.title = setting.title + '-' + to.meta.title;
  nprogress.done();
});
